/***************************************************************************
 *   CPPSocket - library                                                   *
 *                                                                         *
 *   Copyright (C) 2008 by kuerant                                         *
 *                         <kuerant@gmail.com>                             *
 *                                                                         *
 *   This library is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU Library General Public License as       *
 *   published by the Free Software Foundation; either version 2 of the    *
 *   License, or (at your option) any later version.                       *
 *                                                                         *
 *   This library is distributed in the hope that it will be usefull, but  *
 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      *
 *   Library General Public License for more details.                      *
 *                                                                         *
 *   You should have received a copy of the GNU Library General Public     *
 *   License along with this library; if not, write to the Free Software   *
 *   Foundation, Inc., 59 Temple Place - Suite 330, Boston,                *
 *   MA 02111-1307, USA                                                    *
 ***************************************************************************/

#ifndef ZSOCKET_UDPER_HPP
#define ZSOCKET_UDPER_HPP

#include "zsocket/socket.hpp"

namespace zsocket
{
    class Udper
    {
        public  :
            Udper();
            ~Udper();
            
        public  :
            void    open(Address::port_type port = 0) throw (Exception);
            void    close() throw (Exception);
            void    sendto(const Address& addr, const std::string& data, int timeout=-1) throw (Exception);
            void    recvfrom(Address& addr, std::string& data, int timeout=-1) throw (Exception);
            
            void    sendto(const Address& addr, const void* pvData, unsigned iDataSize, int timeout=-1) throw (Exception);
             
            Address getAddress() throw (Exception);
            
            int     descriptor(void);

        private :
            void    setup(void) throw (Exception);
            
        protected   :
            Socket   socket;
            
            const size_t   BUF_SIZE;
            char*    buffer;
    };
}

#endif
